package com.jieao.system.utils;

import java.util.List;
import java.util.Optional;

import com.jieao.common.constant.Constants;
import com.jieao.common.utils.CacheUtils;
import com.jieao.common.utils.StringUtils;
import com.jieao.system.domain.SysDictData;

/**
 * 字典工具类
 */
public class DictUtils {
    /**
     * 设置字典缓存
     *
     * @param key       参数键
     * @param dictDatas 字典数据列表
     */
    public static void setDictCache(String key, List<SysDictData> dictDatas) {
        CacheUtils.put(getCacheName(), getCacheKey(key), dictDatas);
    }

    /**
     * 获取字典缓存
     *
     * @param key 参数键
     * @return dictDatas 字典数据列表
     */
    public static List<SysDictData> getDictCache(String key) {
        Object cacheObj = CacheUtils.get(getCacheName(), getCacheKey(key));
        if (StringUtils.isNotNull(cacheObj)) {
            List<SysDictData> DictDatas = StringUtils.cast(cacheObj);
            return DictDatas;
        }
        return null;
    }

    public static SysDictData getDictCache(String key, String code) {
        Optional<SysDictData> first = DictUtils.getDictCache(key).stream().filter(sysDictData -> sysDictData.getDictLabel().equals(code)).findFirst();
        if (first.isPresent()) {
            return first.get();
        }
        return null;
    }

    /**
     * 获取字典默认值
     *
     * @param key
     * @return {com.jieao.system.domain.SysDictData}
     * @author LWF
     * @date 2020/7/23 15:10
     **/
    public static SysDictData getDictDefaultCache(String key) {
        Optional<SysDictData> first = DictUtils.getDictCache(key).stream().filter(sysDictData -> sysDictData.getDefault()).findFirst();
        if (first.isPresent()) {
            return first.get();
        }
        return null;
    }

    /**
     * 清空字典缓存
     */
    public static void clearDictCache() {
        CacheUtils.removeAll(getCacheName());
    }

    /**
     * 获取cache name
     *
     * @return 缓存名
     */
    public static String getCacheName() {
        return Constants.SYS_DICT_CACHE;
    }

    /**
     * 设置cache key
     *
     * @param configKey 参数键
     * @return 缓存键key
     */
    public static String getCacheKey(String configKey) {
        return Constants.SYS_DICT_KEY + configKey;
    }
}
